<?php

class AdminController extends Zend_Controller_Action
{

    public function init()
    {
        session_start("login");
        if ((!isset($_SESSION["login_id"])) || ($_SESSION["login_admin"] != 1)) {
            throw new Zend_Controller_Action_Exception('This page does not exist', 404);
        }
    }

    public function indexAction()
    {
        /* Inicia Instancias de banco */
        $dbCompany = new Application_Model_DbTable_Company();
        $dbEvaluation = new Application_Model_DbTable_Evaluation();
        $dbUser = new Application_Model_DbTable_User();
        
        /* Usuários */
        $getUsers = $dbUser->fetchAll();
        $this->view->totalUsers = $getUsers->count();//Num Total
        $todayU = 0;//Registrador Hoje
        $facebook = 0;//Facebook
        $linkedin = 0;//Linkedin
        foreach ($getUsers AS $user) {
            if ($user['kind'] == 'facebook') $facebook = $facebook + 1;
            if ($user['kind'] == 'linkedin') $linkedin = $linkedin + 1;
            if (date("d/m/Y", strtotime($user['created_at'])) == date("d/m/Y")) $todayU = $todayU + 1;
        }
        $this->view->usersToday = $todayU;
        $this->view->usersFacebook = $facebook;
        $this->view->usersLinkedin = $linkedin;
        
        /* Empresas */
        $getCompanies = $dbCompany->fetchAll();
        $this->view->totalCompanies = $getCompanies->count();//Num Total
        $todayC = 0;//Registrador Hoje
        $pendentesC = 0;//Registros pendentes
        foreach ($getCompanies AS $company) {
            if (date("d/m/Y", strtotime($company['created_at'])) == date("d/m/Y")) $todayC = $todayC + 1;
            if (($company['active'] == 0) && ($company['deleted'] == 0)) $pendentesC = $pendentesC + 1;
        }
        $this->view->companiesToday = $todayC;
        $this->view->companiesPendentes = $pendentesC;
        
        /* Avals */
        $getEvaluations = $dbEvaluation->fetchAll();
        $this->view->totalEvaluations = $getEvaluations->count();//Num Total
        $todayE = 0;//Registrador Hoje
        $pendentesE = 0;//Registros pendentes
        foreach ($getEvaluations AS $evaluation) {
            if (date("d/m/Y", strtotime($evaluation['created_at'])) == date("d/m/Y")) $todayE = $todayE + 1;
            if (($evaluation['active'] == 0) && ($evaluation['deleted'] == 0)) $pendentesE = $pendentesE + 1;
        }
        $this->view->evaluationsToday = $todayE;
        $this->view->evaluationsPendentes = $pendentesE;
    }

    public function usuariosAction()
    {
        /* Inicia Instancias de banco */
        $dbUser = new Application_Model_DbTable_User();
        $getUsers = $dbUser->fetchAll();
        $users = array();
        foreach ($getUsers AS $user) {
            $userItem['id'] = $user['id'];
            $userItem['name'] = $user['name'];
            $userItem['email'] = $user['email'];
            $userItem['url'] = $user['url'];
            $userItem['admin'] = $user['admin'];
            $userItem['active'] = $user['active'];
            $userItem['kind'] = $user['kind'];
            $userItem['created_at'] = $user['created_at'];
            $users[] = $userItem;
        }
        $this->view->users = $users;
    }

    public function banirUsuarioAction()
    {
        $parametros = $this->getAllParams();
        if (isset($parametros['user'])) {
            $dbUser = new Application_Model_DbTable_User();
            $getUser = $dbUser->fetchAll(
                $dbUser->select('active')
                      ->where('id = ?', $parametros['user'])
            );
            $active = $getUser[0]['active'];
            
            if ($dbUser->update(array('active' => !$active), $dbUser->getAdapter()->quoteInto('id = ?', $parametros['user']))) {
                $_SESSION["message_success"] = "Usuário banido do sistema.";
                $this->_helper->redirector('usuarios','admin');
            } else {
                $_SESSION["message_danger"] = "Ocorreu um problema.Tente novamente.";
                $this->_helper->redirector('usuarios','admin');
            }
        } else {
            $_SESSION["message_danger"] = "Impossível deletar usuário sem ID.";
            $this->_helper->redirector('usuarios','admin');
        }
    }

    public function empresasAction()
    {
        /* Inicia Instancias de banco */
        $dbCompany = new Application_Model_DbTable_Company();
        $dbEvaluation = new Application_Model_DbTable_Evaluation();
        $dbCategory = new Application_Model_DbTable_Category();
        
        /* Busca as categorias */
        $categoriesResult = $dbCategory->fetchAll(
            $dbCategory->select('id, name')
        );
        foreach ($categoriesResult as $key => $value) {
            $categories[$value['id']] = $value['name'];
        }
        
         /* Busca as empresas */
        $companiesResult = $dbCompany->fetchAll();
        
        /* Tratar Empresas */
        $companies = array();
        foreach ($companiesResult AS $company) {
            $companyItem['id'] = $company['id'];
            $companyItem['name'] = $company['name'];
            $companyItem['logo'] = $company['logo'];
            $companyItem['category'] = $categories[$company['category_id']];
            $companyItem['created_at'] = $company['created_at'];
            $companyItem['active'] = $company['active'];
            $companyItem['friendly_name'] = $company['friendly_name'];
            $companyItem['deleted'] = $company['deleted'];
            $companyItem['evaluations'] = $dbEvaluation->fetchAll($dbEvaluation->getAdapter()->quoteInto('company_id = ?', $company['id']))->count();
            $companies[] = $companyItem;
        }
        $this->view->companies = $companies;
    }
    
    private function fileUpload($company) 
    {
        // Pasta onde o arquivo vai ser salvo
        $_UP['pasta'] = APPLICATION_PATH . '/../public/uploads/';
        
        // Tamanho máximo do arquivo (em Bytes)
        $_UP['tamanho'] = 1024 * 1024 * 2; // 2Mb

        // Array com as extensões permitidas
        $_UP['extensoes'] = array('jpg', 'png', 'gif');

        // Renomeia o arquivo? (Se true, o arquivo será salvo como .jpg e um nome único)
        $_UP['renomeia'] = true;

        // Array com os tipos de erros de upload do PHP
        $_UP['erros'][0] = 'Não houve erro';
        $_UP['erros'][1] = 'O arquivo no upload é maior do que o limite do PHP';
        $_UP['erros'][2] = 'O arquivo ultrapassa o limite de tamanho especifiado no HTML';
        $_UP['erros'][3] = 'O upload do arquivo foi feito parcialmente';
        $_UP['erros'][4] = 'Não foi feito o upload do arquivo';

        // Verifica se houve algum erro com o upload. Se sim, exibe a mensagem do erro
        if ($_FILES['logo']['error'] != 0) {
            //die("Não foi possível fazer o upload, erro:<br />" . $_UP['erros'][$_FILES['arquivo']['error']]);
            //exit; // Para a execução do script
            return array('success' => false, 'message' => "Não foi possível fazer o upload, erro:<br />" . $_UP['erros'][$_FILES['arquivo']['error']]);
        }

        // Faz a verificação da extensão do arquivo
        $extensao = strtolower(end(explode('.', $_FILES['logo']['name'])));
        if (array_search($extensao, $_UP['extensoes']) === false) {
            //echo "Por favor, envie arquivos com as seguintes extensões: jpg, png ou gif";
            return array('success' => false, 'message' => "Por favor, envie arquivos com as seguintes extensões: jpg, png ou gif");
        }

        // Faz a verificação do tamanho do arquivo
        else if ($_UP['tamanho'] < $_FILES['logo']['size']) {
            //echo "O arquivo enviado é muito grande, envie arquivos de até 2Mb.";
            return array('success' => false, 'message' => "O arquivo enviado é muito grande, envie arquivos de até 2Mb.");
        }

        // O arquivo passou em todas as verificações, hora de tentar movê-lo para a pasta
        else {
        // Primeiro verifica se deve trocar o nome do arquivo
            if ($_UP['renomeia'] == true) {
                // Cria um nome baseado no UNIX TIMESTAMP atual e com extensão .jpg
                $nome_final = time().'-'.$company.'.jpg';
                //$nome_final = $company.'.jpg';
            } else {
                // Mantém o nome original do arquivo
                $nome_final = $_FILES['logo']['name'];
            }

            // Depois verifica se é possível mover o arquivo para a pasta escolhida
            if (move_uploaded_file($_FILES['logo']['tmp_name'], $_UP['pasta'] . $nome_final)) {
                // Upload efetuado com sucesso, exibe uma mensagem e um link para o arquivo
                //echo "Upload efetuado com sucesso!";
                //echo '<br /><a href="' . $_UP['pasta'] . $nome_final . '">Clique aqui para acessar o arquivo</a>';
                return array('success' => true, 'message' => $nome_final);
            } else {
                // Não foi possível fazer o upload, provavelmente a pasta está incorreta
                //echo "Não foi possível enviar o arquivo, tente novamente";
                return array('success' => false, 'message' => "Não foi possível enviar o arquivo, tente novamente");
            }

        }
    }

    public function editarEmpresasAction()
    {
        $parametros = $this->getAllParams();
        if (isset($parametros['company'])) {
            if (isset($_POST['name'])) {
                /* SAVE MODIFICATIONS */
                $dbCompanies = new Application_Model_DbTable_Company();
                if ($_FILES['logo']['size'] > 0) {
                    $upload = $this->fileUpload($_POST['name']);
                    $img = '/uploads/'.$upload['message'];
                } else {
                    $img = $_POST['logoOld'];
                }
                $friendlyname = str_replace(' ', '-', strtolower($_POST['name']));
                $newCompany = array(
                    'name' => $_POST['name'],
                    'friendly_name' => $friendlyname,
                    'size' => $_POST['size'],
                    'site' => $_POST['site'],
                    'description' => $_POST['description'],
                    'logo' => $img,
                    'category_id' => $_POST['category']
                );
                if ($dbCompanies->update($newCompany, $dbCompanies->getAdapter()->quoteInto('id = ?', $parametros['company']))) {
                    $_SESSION["message_success"] = "Empresa modificada.";
                    $this->_helper->redirector('empresas','admin');
                } else {
                    $_SESSION["message_danger"] = "Ocorreu um problema.Tente novamente.";
                    $this->_helper->redirector('empresas','admin');
                }
            } else {
                $dbCompanies = new Application_Model_DbTable_Company();
                $dbCategory = new Application_Model_DbTable_Category();
                $getCompany = $dbCompanies->fetchAll(
                    $dbCompanies->select()
                                ->where('id = ?', $parametros['company'])
                );
                /* Pegar Dados */
                $company['id'] = $getCompany[0]['id'];
                $company['name'] = $getCompany[0]['name'];
                $company['logo'] = $getCompany[0]['logo'];
                $company['size'] = $getCompany[0]['size'];
                $company['category_id'] = $getCompany[0]['category_id'];
                $company['description'] = $getCompany[0]['description'];
                $company['site'] = $getCompany[0]['site'];
                $this->view->company = $company;
                
                /* Busca as categorias */
                $categoriesResult = $dbCategory->fetchAll(
                    $dbCategory->select('id, name')
                );
                foreach ($categoriesResult as $key => $value) {
                    $categories[$value['id']] = $value['name'];
                }
                $this->view->categories = $categories;
            }
        } else {
            $_SESSION["message_danger"] = "Impossível editar empresa sem ID.";
            $this->_helper->redirector('empresas','admin');
        }
    }

    public function aprovarEmpresasAction()
    {
        $parametros = $this->getAllParams();
        if (isset($parametros['aproved'])) {
            /* SAVE MODIFICATIONS */
            $dbCompanies = new Application_Model_DbTable_Company();
            if ($parametros['aproved'] == true) {
                $data = array(
                    'active' => 1,
                    'updated_at' => date()
                );
            } else {
                $data = array(
                    'deleted' => 1,
                    'updated_at' => date()
                );
            }
            if ($dbCompanies->update($data, $dbCompanies->getAdapter()->quoteInto('id = ?', $parametros['company']))) {
                $_SESSION["message_success"] = "Empresa moderada.";
                $this->_helper->redirector('aprovar-empresas','admin');
            } else {
                $_SESSION["message_danger"] = "Ocorreu um problema.Tente novamente.";
                $this->_helper->redirector('aprovar-empresas','admin');
            }
        } else {
            $dbCompanies = new Application_Model_DbTable_Company();
            $dbCategory = new Application_Model_DbTable_Category();
            $getCompanies = $dbCompanies->fetchAll(
                $dbCompanies->select()
                            ->where('active = 0')
                            ->where('deleted = 0')
            );
            
            /* Busca as categorias */
            $categoriesResult = $dbCategory->fetchAll(
                $dbCategory->select('id, name')
            );
            foreach ($categoriesResult as $key => $value) {
                $categories[$value['id']] = $value['name'];
            }
            
            /* Pegar Dados */
            $companies = array();
            foreach ($getCompanies AS $value) {
                $company['id'] = $value['id'];
                $company['name'] = $value['name'];
                $company['logo'] = $value['logo'];
                $company['size'] = $value['size'];
                $company['category'] = $categories[$value['category_id']];
                $company['description'] = $value['description'];
                $company['site'] = $value['site'];
                $companies[] = $company;
            }
            $this->view->companies = $companies;
        }
    }

    public function avaliacoesAction()
    {
        /* Inicia Instancias de banco */
        $dbCompany = new Application_Model_DbTable_Company();
        $dbEvaluation = new Application_Model_DbTable_Evaluation();
        
        /* Busca as empresas */
        $evaluationsResult = $dbEvaluation->fetchAll();
        
        /* Tratar Empresas */
        $evaluations = array();
        foreach ($evaluationsResult AS $evaluation) {
            $evalItem['id'] = $evaluation['id'];
            $evalItem['function'] = $evaluation['function'];
            $evalItem['location'] = $evaluation['location'];
            $evalItem['gender'] = $evaluation['gender'];
            $evalItem['deleted'] = $evaluation['deleted'];
            $evalItem['active'] = $evaluation['active'];
            $evalItem['created_at'] = $evaluation['created_at'];
            $company = $dbCompany->fetchAll($dbEvaluation->getAdapter()->quoteInto('id = ?', $evaluation['company_id']));
            $evalItem['company'] = $company[0]['name'];
            $evalItem['company_friendly_name'] = $company[0]['friendly_name'];
            $evaluations[] = $evalItem;
        }
        $this->view->evaluations = $evaluations;
    }

   public function aprovarAvaliacoesAction()
    {
        $parametros = $this->getAllParams();
        if (isset($parametros['aproved'])) {
            /* SAVE MODIFICATIONS */
            $dbEvaluations = new Application_Model_DbTable_Evaluation();
            if ($parametros['aproved'] == true) {
                $data = array(
                    'active' => 1
                );
            } else {
                $data = array(
                    'deleted' => 1
                );
            }
            if ($dbEvaluations->update($data, $dbEvaluations->getAdapter()->quoteInto('id = ?', $parametros['evaluation']))) {
                $_SESSION["message_success"] = "Avaliação moderada.";
                $this->_helper->redirector('aprovar-avaliacoes','admin');
            } else {
                $_SESSION["message_danger"] = "Ocorreu um problema.Tente novamente.";
                $this->_helper->redirector('aprovar-avaliacoes','admin');
            }
        } else {
            $dbEvaluations = new Application_Model_DbTable_Evaluation();
            $dbCompanies = new Application_Model_DbTable_Company();
            $dbUsers = new Application_Model_DbTable_User();
            $getEvaluations = $dbEvaluations->fetchAll(
                $dbEvaluations->select()
                              ->where('active = 0')
                              ->where('deleted = 0')
            );
            /* Dados */
            $evaluations = array();
            foreach ($getEvaluations as $eval) {
                /*company name */
                $getCompany = $dbCompanies->fetchAll(
                    $dbCompanies->select()
                                ->where('id = ?', $eval['company_id'])
                );
                $evaluation['company_name'] = $getCompany[0]['name'];
                $evaluation['company_friendly_name'] = $getCompany[0]['friendly_name'];
                /*User Name */
                $getUsers = $dbUsers->fetchAll(
                    $dbUsers->select()
                            ->where('id = ?', $eval['user_id'])
                );
                $evaluation['user'] = $getUsers[0]['name'];
                $evaluation['user_link'] = $getUsers[0]['url'];
                /* Dados */
                $evaluation['id'] = $eval['id'];
                $evaluation['location'] = $eval['location'];
                $evaluation['function'] = $eval['function'];
                $evaluation['age'] = $eval['age'];
                $evaluation['gender'] = $eval['gender'];
                $evaluation['actual'] = $eval['actual'];
                $evaluation['recomend'] = $eval['recomend'];
                $evaluation['opinion'] = $eval['opinion'];
                $evaluation['year'] = $eval['year'];
                $evaluation['area'] = $eval['area'];
                $evaluation['date'] = $eval['created_at'];
                /* Nota Média de Avaliações */
                $sum = 0;
                $sum = $sum + $eval['strategy'];
                $sum = $sum + $eval['leadership'];
                $sum = $sum + $eval['culture'];
                $sum = $sum + $eval['opportunity'];
                $sum = $sum + $eval['recognition'];
                $sum = $sum + $eval['workspace'];
                $sum = $sum + $eval['payment'];
                $sum = $sum + $eval['flexibility'];
                $sum = $sum + $eval['workoverload'];
                $sum = $sum + $eval['coworkers'];
                $sum = $sum + $eval['salary'];
                $evaluation['star_rate'] = round(($sum/11), 2);
                /* Add to Evaluations  */
                $evaluations[] = $evaluation;
            }
            $this->view->evaluations = $evaluations;
        }
    }

    public function removerEmpresasAction()
    {
        $parametros = $this->getAllParams();
        if (isset($parametros['company'])) {
            $dbCompanies = new Application_Model_DbTable_Company();
            $getCompany = $dbCompanies->fetchAll(
                $dbCompanies->select('deleted')
                      ->where('id = ?', $parametros['company'])
            );
            $deleted = $getCompany[0]['deleted'];
            
            if ($dbCompanies->update(array('deleted' => !$deleted), $dbCompanies->getAdapter()->quoteInto('id = ?', $parametros['company']))) {
                $_SESSION["message_success"] = "Estado da empresa modificado.";
                $this->_helper->redirector('empresas','admin');
            } else {
                $_SESSION["message_danger"] = "Ocorreu um problema.Tente novamente.";
                $this->_helper->redirector('empresas','admin');
            }
        } else {
            $_SESSION["message_danger"] = "Impossível deletar empresa sem ID.";
            $this->_helper->redirector('empresas','admin');
        }
    }

    public function removerAvaliacoesAction()
    {
        $parametros = $this->getAllParams();
        if (isset($parametros['avaliacao'])) {
            $dbEvaluations = new Application_Model_DbTable_Evaluation();
            $getEvaluations = $dbEvaluations->fetchAll(
                $dbEvaluations->select('deleted')
                      ->where('id = ?', $parametros['avaliacao'])
            );
            $deleted = $getEvaluations[0]['deleted'];
            
            if ($dbEvaluations->update(array('deleted' => !$deleted), $dbEvaluations->getAdapter()->quoteInto('id = ?', $parametros['avaliacao']))) {
                $_SESSION["message_success"] = "Estado da avaliação modificado.";
                $this->_helper->redirector('avaliacoes','admin');
            } else {
                $_SESSION["message_danger"] = "Ocorreu um problema.Tente novamente.";
                $this->_helper->redirector('avaliacoes','admin');
            }
        } else {
            $_SESSION["message_danger"] = "Impossível deletar avaliação sem ID.";
            $this->_helper->redirector('avaliacoes','admin');
        }
    }


}